package part1.practise_dip;

/**
 * Created by lie on 2018/3/26.
 * @see Circle 形成了闭环，我们这里尝试解决
 *
 * 可以看到，经过反转
 * application又一次依赖于dialog（这里特意把接口放进类里）
 * 而Dialog并不依赖application
 */
public class BreakCircle {

    public static void main(String[] args){
        Dialog.askApplication(new Application());
    }
}


//application依赖于dialog接口
class Application implements Dialog.DialogServer {
    private static void appSayHi(){
        System.out.println("app say hi");
    }

    public void serveDialog() {
        appSayHi();
    }
}



class Dialog {
    //我这里并不知道具体是哪个实现类会来的
    //我这里不需要依赖application，而是依赖于一个抽象
    public static void askApplication(DialogServer server){
        server.serveDialog();
    }

    interface DialogServer{
        //想倒置依赖
        //这里dialog调用application，那么dialog是客户，是高层
        //所以给dialog弄个接口，而底层去实现它
        void serveDialog();
    }
}